/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sigodonto.view.managedbean;

import br.com.sigodonto.model.dao.DaoGenerico;
import br.com.sigodonto.model.entity.Clinica;
import br.com.sigodonto.model.entity.Dente;
import br.com.sigodonto.model.entity.Paciente;
import br.com.sigodonto.model.util.RelatorioUtil;
import br.com.sigodonto.model.util.SessionUtil;
import br.com.sigodonto.view.datamodel.PacienteDataModel;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author Fidelis
 */
@ManagedBean
@ViewScoped
public class EmitirFichaCompletaMB implements Serializable {

    /**
     * Creates a new instance of EmitirFichaCompletaMB
     */
    private Paciente pacienteSelecionado;
    private PacienteDataModel pacienteDataModel;
    private DaoGenerico daoGenerico;
    private Clinica clinica;
    private String obs;
    private Dente d18;
    private Dente d17;
    private Dente d16;
    private Dente d15;
    private Dente d14;
    private Dente d13;
    private Dente d12;
    private Dente d11;
    private Dente d21;
    private Dente d22;
    private Dente d23;
    private Dente d24;
    private Dente d25;
    private Dente d26;
    private Dente d27;
    private Dente d28;
    private Dente d48;
    private Dente d47;
    private Dente d46;
    private Dente d45;
    private Dente d44;
    private Dente d43;
    private Dente d42;
    private Dente d41;
    private Dente d31;
    private Dente d32;
    private Dente d33;
    private Dente d34;
    private Dente d35;
    private Dente d36;
    private Dente d37;
    private Dente d38;

    public EmitirFichaCompletaMB() {
        this.daoGenerico = new DaoGenerico();
        List<Paciente> pacientes = this.daoGenerico.listarTodos(Paciente.class);
        this.pacienteDataModel = new PacienteDataModel(pacientes);
        FacesContext context = FacesContext.getCurrentInstance();
        this.clinica = SessionUtil.carregarClinica(context);
        this.montarOdontograma(null);
    }

    public Paciente getPacienteSelecionado() {
        return pacienteSelecionado;
    }

    public void setPacienteSelecionado(Paciente pacienteSelecionado) {
        this.pacienteSelecionado = pacienteSelecionado;
    }

    public PacienteDataModel getPacienteDataModel() {
        return pacienteDataModel;
    }

    public void setPacienteDataModel(PacienteDataModel pacienteDataModel) {
        this.pacienteDataModel = pacienteDataModel;
    }

    public String getObs() {
        return obs;
    }

    public void setObs(String obs) {
        this.obs = obs;
    }

    public void emitirFichaCompleta() {
        FacesMessage message = new FacesMessage();
        String msg = "FICHA EMITIDA COM SUCESSO!";
        message.setSeverity(FacesMessage.SEVERITY_INFO);
        
        

        if (pacienteSelecionado != null) {
            if(pacienteSelecionado.getOdontograma() != null && !pacienteSelecionado.getOdontograma().getDentes().isEmpty()){
                this.montarOdontograma(pacienteSelecionado.getOdontograma().getDentes());
            }
            HashMap<String, Object> parameterMap = new HashMap<String, Object>();
            String foto = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/resources/pacientes/" + this.pacienteSelecionado.getFoto());
            String logo = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/resources/clinica/" + this.clinica.getLogo2());
            
            parameterMap.put("d18", this.d18);
            parameterMap.put("d17", this.d17);
            parameterMap.put("d16", this.d16);
            parameterMap.put("d15", this.d15);
            parameterMap.put("d14", this.d14);
            parameterMap.put("d13", this.d13);
            parameterMap.put("d12", this.d12);
            parameterMap.put("d11", this.d11);
            
            parameterMap.put("d21", this.d21);
            parameterMap.put("d22", this.d22);
            parameterMap.put("d23", this.d23);
            parameterMap.put("d24", this.d24);
            parameterMap.put("d25", this.d25);
            parameterMap.put("d26", this.d26);
            parameterMap.put("d27", this.d27);
            parameterMap.put("d28", this.d28);
            
            parameterMap.put("d48", this.d48);
            parameterMap.put("d47", this.d47);
            parameterMap.put("d46", this.d46);
            parameterMap.put("d45", this.d45);
            parameterMap.put("d44", this.d44);
            parameterMap.put("d43", this.d43);
            parameterMap.put("d42", this.d42);
            parameterMap.put("d41", this.d41);
            
            parameterMap.put("d31", this.d31);
            parameterMap.put("d32", this.d32);
            parameterMap.put("d33", this.d33);
            parameterMap.put("d34", this.d34);
            parameterMap.put("d35", this.d35);
            parameterMap.put("d36", this.d36);
            parameterMap.put("d37", this.d37);
            parameterMap.put("d38", this.d38);
            
            parameterMap.put("CLINICA_LOGO", logo);
            parameterMap.put("OBS", this.obs);
            parameterMap.put("FOTO", foto);

            List<Paciente> pacientes = new ArrayList<Paciente>();
            pacientes.add(pacienteSelecionado);

            String relatorio = "ficha.jasper";
            RelatorioUtil.gerarRelatorio(relatorio, parameterMap, pacientes);

            this.zerar();
        } else {
            msg = "SELECIONE UM PACIENTE!";
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
        }

        message.setSummary(msg);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void onRowSelect(SelectEvent event) {
    }

    private void zerar() {
        this.obs = "";
        this.pacienteSelecionado = new Paciente();
        this.montarOdontograma(null);
    }
    
    private void montarOdontograma(List<Dente> dentesPaciente) {
        if (dentesPaciente == null) {
            this.d18 = new Dente("18", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d17 = new Dente("17", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d16 = new Dente("16", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d15 = new Dente("15", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d14 = new Dente("14", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d13 = new Dente("13", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d12 = new Dente("12", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d11 = new Dente("11", "normal", "p0", "p0", "p0", "p0", "p0");

            this.d21 = new Dente("21", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d22 = new Dente("22", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d23 = new Dente("23", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d24 = new Dente("24", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d25 = new Dente("25", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d26 = new Dente("26", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d27 = new Dente("27", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d28 = new Dente("28", "normal", "p0", "p0", "p0", "p0", "p0");

            this.d48 = new Dente("48", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d47 = new Dente("47", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d46 = new Dente("46", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d45 = new Dente("45", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d44 = new Dente("44", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d43 = new Dente("43", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d42 = new Dente("42", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d41 = new Dente("41", "normal", "p0", "p0", "p0", "p0", "p0");

            this.d31 = new Dente("31", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d32 = new Dente("32", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d33 = new Dente("33", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d34 = new Dente("34", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d35 = new Dente("35", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d36 = new Dente("36", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d37 = new Dente("37", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d38 = new Dente("38", "normal", "p0", "p0", "p0", "p0", "p0");

        }else{
            for (Dente dente : dentesPaciente) {
                int numero = Integer.parseInt(dente.getNumero());
                switch(numero){
                    case 18:
                        this.d18 = dente;
                        break;
                    case 17:
                        this.d17 = dente;
                        break;
                    case 16:
                        this.d16 = dente;
                        break;
                    case 15:
                        this.d15 = dente;
                        break;
                    case 14:
                        this.d14 = dente;
                        break;
                    case 13:
                        this.d13 = dente;
                        break;
                    case 12:
                        this.d12 = dente;
                        break;
                    case 11:
                        this.d11 = dente;
                        break;
                    case 21:
                        this.d21 = dente;
                        break;
                    case 22:
                        this.d22 = dente;
                        break;
                    case 23:
                        this.d23 = dente;
                        break;
                    case 24:
                        this.d24 = dente;
                        break;
                    case 25:
                        this.d25 = dente;
                        break;
                    case 26:
                        this.d26 = dente;
                        break;
                    case 27:
                        this.d27 = dente;
                        break;
                    case 28:
                        this.d28 = dente;
                        break;
                    case 48:
                        this.d48 = dente;
                        break;
                    case 47:
                        this.d47 = dente;
                        break;
                    case 46:
                        this.d46 = dente;
                        break;
                    case 45:
                        this.d45 = dente;
                        break;
                    case 44:
                        this.d44 = dente;
                        break;
                    case 43:
                        this.d43 = dente;
                        break;
                    case 42:
                        this.d42 = dente;
                        break;
                    case 41:
                        this.d41 = dente;
                        break;
                    case 31:
                        this.d31 = dente;
                        break;
                    case 32:
                        this.d32 = dente;
                        break;
                    case 33:
                        this.d33 = dente;
                        break;
                    case 34:
                        this.d34 = dente;
                        break;
                    case 35:
                        this.d35 = dente;
                        break;
                    case 36:
                        this.d36 = dente;
                        break;
                    case 37:
                        this.d37 = dente;
                        break;
                    case 38:
                        this.d38 = dente;
                        break;
                }
            }
        }

    }
}
